package com.potenza.wxuser.aop;


import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.potenza.wxuser.annotation.SysLog;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;
import java.util.Date;

@Aspect
@Component
public class LogAspect {

    /**
     * 切入点
     * 匹配包及其子包下的所有类的所有方法
     * Pointcut annotation
     */
    @Pointcut("@annotation(com.potenza.wxuser.annotation.SysLog)")
    public void pointCut_logAspect(){

    }


    /**
     * 后置异常通知
     * 定义一个名字，该名字用于匹配通知实现方法的一个参数名，
     * 当目标方法抛出异常返回后，将把目标方法抛出的异常传给通知方法；
     * throwing 只有目标方法抛出的异常与通知方法相应参数异常类型时才能执行后置异常通知，否则不执行，
     * @param joinPoint
     * @param e
     */
    @After("pointCut_logAspect()")
    public void afterAdvice(JoinPoint joinPoint){
        System.out.println("----------- 后置通知 -----------");
        saveSysLog(joinPoint);
    }

    private void saveSysLog(JoinPoint joinPoint) {
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod();

        System.out.println("写日志");
    }
}
